package com.example.myapplication;

import android.util.Log;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

// 网络请求工具类（本地模拟验证，国内可用，仅允许指定账号登录）
public class HttpUtil {
    private static final String TAG = "HttpUtil";
    // 保留原常量（避免ViewModel报错，实际不再用真实接口）
    public static final String LOGIN_URL = "https://reqres.in/api/login";
    public static final String REGISTER_URL = "https://reqres.in/api/register";
    public static final String AUTO_LOGIN_URL = "https://reqres.in/api/auto-login";

    // 你指定的「正确账号密码」（仅这组能登录成功）
    private static final String CORRECT_EMAIL = "912962759@qq.com";
    private static final String CORRECT_PASSWORD = "123456";

    // 网络请求回调（保持原有签名，不影响ViewModel）
    public interface HttpCallback {
        void onSuccess(String response); // 成功返回JSON字符串
        void onFailure(String errorMsg); // 失败返回错误信息
    }

    // 1. POST请求（登录/注册用，改为本地模拟验证）
    public static void sendPostRequest(String url, String jsonParams, HttpCallback callback) {
        // 用子线程模拟「网络请求延迟」（更真实，避免瞬间响应）
        new Thread(() -> {
            try {
                // 模拟网络延迟1秒（模拟真实请求耗时）
                Thread.sleep(1000);

                // 从JSON参数中提取用户输入的邮箱和密码（不用Gson，简单解析）
                String inputEmail = extractParamFromJson(jsonParams, "email");
                String inputPassword = extractParamFromJson(jsonParams, "password");

                // 验证账号密码（仅你指定的账号能通过）
                if (CORRECT_EMAIL.equals(inputEmail) && CORRECT_PASSWORD.equals(inputPassword)) {
                    // 登录成功：返回模拟的JSON响应（带token，和原逻辑一致）
                    String successResponse = "{\"token\":\"my_custom_token_123456\"}";
                    MainActivity.runOnMainThread(() -> callback.onSuccess(successResponse));
                } else {
                    // 登录失败：返回错误信息
                    String errorMsg = "请求失败，错误码：400，原因：账号或密码错误（正确账号：912962759@qq.com，密码：123456）";
                    MainActivity.runOnMainThread(() -> callback.onFailure(errorMsg));
                }

            } catch (InterruptedException e) {
                // 模拟网络异常
                String error = "网络异常：请求超时";
                Log.e(TAG, error);
                MainActivity.runOnMainThread(() -> callback.onFailure(error));
            }
        }).start();
    }

    // 2. GET请求（自动登录用，本地模拟token验证）
    public static void sendGetRequest(String token, HttpCallback callback) {
        new Thread(() -> {
            try {
                // 模拟网络延迟
                Thread.sleep(800);

                // 模拟token验证：只要token不为空（登录成功时保存的token），就视为自动登录成功
                if (token != null && !token.isEmpty()) {
                    String successResponse = "{\"msg\":\"自动登录验证通过\"}";
                    MainActivity.runOnMainThread(() -> callback.onSuccess(successResponse));
                } else {
                    String error = "自动登录失败，错误码：401，原因：token为空";
                    MainActivity.runOnMainThread(() -> callback.onFailure(error));
                }

            } catch (InterruptedException e) {
                String error = "自动登录网络异常：请求超时";
                Log.e(TAG, error);
                MainActivity.runOnMainThread(() -> callback.onFailure(error));
            }
        }).start();
    }

    // 辅助方法：从JSON字符串中提取指定字段（如email、password）
    private static String extractParamFromJson(String json, String paramKey) {
        if (json == null || json.isEmpty()) return "";

        // 简单正则匹配：例如从{"email":"xxx","password":"xxx"}中提取xxx
        String regex = "\"" + paramKey + "\":\"([^\"]+)\"";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(json);

        if (matcher.find()) {
            return matcher.group(1); // 返回匹配到的参数值
        }
        return "";
    }
}